package com.aimashi.judge.codesandbox.impl;

import com.aimashi.judge.codesandbox.CodeSandbox;
import com.aimashi.judge.codesandbox.model.ExecuteCodeRequest;
import com.aimashi.judge.codesandbox.model.ExecuteCodeResponse;
import com.aimashi.judge.codesandbox.model.JudgeInfo;
import com.aimashi.model.enums.JudgeInfoMessageEnum;
import com.aimashi.model.enums.QuestionSubmitStatusEnum;
import java.util.List;

/**
 * ExampleCodeSandbox 类实现了 CodeSandbox 接口，用于演示代码执行功能
 * 它提供了一个具体的实现来执行代码并返回执行结果
 */
public class ExampleCodeSandbox implements CodeSandbox {

    /**
     * 执行代码的主要方法
     *
     * @param executeCodeRequest 包含代码执行所需信息的请求对象，包括输入列表等
     * @return 返回一个 ExecuteCodeResponse 对象，包含执行结果、消息和状态
     */
    @Override
    public ExecuteCodeResponse executeCode(ExecuteCodeRequest executeCodeRequest) {
        // 获取输入列表，这是执行代码时需要的参数
        List<String> inputList = executeCodeRequest.getInputList();

        // 创建一个新的 ExecuteCodeResponse 对象来存储执行结果
        ExecuteCodeResponse executeCodeResponse = new ExecuteCodeResponse();

        // 将输入列表设置为输出列表，假设代码执行只是简单地返回输入
        executeCodeResponse.setOutputList(inputList);

        // 设置执行消息，表示代码执行成功的消息
        executeCodeResponse.setMessage("测试执行成功");

        // 设置执行状态为成功，使用 QuestionSubmitStatusEnum 枚举来表示执行状态
        executeCodeResponse.setStatus(QuestionSubmitStatusEnum.SUCCEED.getValue());

        // 创建一个新的 JudgeInfo 对象，用于存储判断信息
        JudgeInfo judgeInfo = new JudgeInfo();

        // 设置 JudgeInfo 的消息为 ACCEPTED，表示代码执行结果被接受
        judgeInfo.setMessage(JudgeInfoMessageEnum.ACCEPTED.getText());

        // 设置 JudgeInfo 的内存使用量为 100L，这里假设的值
        judgeInfo.setMemory(100L);

        // 设置 JudgeInfo 的时间为 100L，也是假设的值
        judgeInfo.setTime(100L);

        // 将 JudgeInfo 对象设置到 ExecuteCodeResponse 中，以提供详细的执行信息
        executeCodeResponse.setJudgeInfo(judgeInfo);

        // 返回填充了执行结果和信息的 ExecuteCodeResponse 对象
        return executeCodeResponse;
    }
}

//public class ExampleCodeSandbox implements CodeSandbox {
//    @Override
//    public ExecuteCodeResponse executeCode(ExecuteCodeRequest executeCodeRequest) {
//        List<String> inputList = executeCodeRequest.getInputList();
//        ExecuteCodeResponse executeCodeResponse = new ExecuteCodeResponse();
//        executeCodeResponse.setOutputList(inputList);
//        executeCodeResponse.setMessage("测试执行成功");
//        executeCodeResponse.setStatus(QuestionSubmitStatusEnum.SUCCEED.getValue());
//        JudgeInfo judgeInfo = new JudgeInfo();
//        judgeInfo.setMessage(JudgeInfoMessageEnum.ACCEPTED.getText());
//        judgeInfo.setMemory(100L);
//        judgeInfo.setTime(100L);
//        executeCodeResponse.setJudgeInfo(judgeInfo);
//        return executeCodeResponse;
//    }
//}